package writtenTraining.day8;

import java.util.*;

/**
 * day8:(1)模拟+数学：HJ108 求最小公倍数
 */
public class Main {
    public static void main(String[] args) {
        // 数学+模拟
        
        // 输入数据
        Scanner in = new Scanner(System.in);
        long a = in.nextLong(), b = in.nextLong();
        
        // 最小公倍数 * 最大公因数 = 两数的乘积
        long ret =  lcm(a,b);

        // 输出结果
        System.out.println(ret);
    }

    public static long lcm(long num1, long num2) {
        long target = num1 * num2;

        // 2.计算最大公因数
        long remain = num1 % num2;
        // 辗转相除法
        while(remain != 0) {
            num1 = num2;
            num2 = remain;
            remain = num1 % num2;
        }

        // 返回两数乘积 / 最大公因数
        return target / num2;
    }
}


/**
 * day8:(2)排序+贪心：NC95 数组中的最长连续子序列
 *
 */


class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     * max increasing subsequence
     * @param arr int整型一维数组 the array
     * @return int整型
     */
    public int MLS (int[] arr) {
        //  排序 + 贪心
        int maxLen = 1, sz = 1;

        // 排序
        Arrays.sort(arr);

        // 查找
        for(int i = 1; i < arr.length; i++) {
            // 如果出现数字相同就直接跳过当前情况
            if(arr[i-1] == arr[i]) {
                continue;
            }
            if((long)arr[i-1] + 1L == (long)arr[i]) {
                sz++;
            } else {
                System.out.println(arr[i-1] + " " + arr[i]);
                // 重新查找连续的子序列，故重新更新为 1
                sz = 1;
            }
            maxLen = Math.max(sz,maxLen);

        }

        return maxLen;
    }
}





/**
 * day8:(3):动态规划思想：DP39 字母收集
 */


 class Main2 {
    public static void main(String[] args) {
        // 动态规划思想

        // 输入数据
        Scanner in = new Scanner(System.in);
        int row = in.nextInt(), col = in.nextInt();
        int[][] score= new int[row][col];
        for(int i = 0; i < row; i++) {
            String str = in.next();
            for(int j = 0; j < col; j++) {
                char ch = str.charAt(j);
                // 分情况输入
                if(ch == 'l') {
                    score[i][j] = 4;
                } else if(ch == 'o') {
                    score[i][j] = 3;
                } else if(ch == 'v') {
                    score[i][j] = 2;
                } else if(ch == 'e'){
                    score[i][j] = 1;
                }
            }
        }


        // 创建dp
        int[][] dp = new int[row+1][col+1];

        // 初始化
        // 填表
        for(int i = 1; i <= row; i++) {
            for(int j = 1; j <= col; j++) {
                // 注意下标映射关系
                dp[i][j] = Math.max(dp[i-1][j]
                        , dp[i][j - 1] ) + score[i-1][j-1];

            }
        }
        // 返回值
        // 输出结果
        System.out.println(dp[row][col]);
    }
}